package org.edu.modules.growth.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Maps;
import lombok.AllArgsConstructor;
import org.edu.modules.growth.config.QueryConditionTool;
import org.edu.modules.growth.dto.VeJsczExamStageDTO;
import org.edu.modules.growth.entity.VeJsczExamDetail;
import org.edu.modules.growth.entity.VeJsczExamStage;
import org.edu.modules.growth.entity.VeJsczExamStageDetail;
import org.edu.modules.growth.entity.VeJsczExamStageProject;
import org.edu.modules.growth.mapper.*;
import org.edu.modules.growth.service.IVeJsczExamStageService;
import org.edu.modules.growth.vo.QueryCondition;
import org.edu.modules.growth.vo.VeJsczExamProjectVo;
import org.edu.modules.growth.vo.VeJsczExamStageVo;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
@AllArgsConstructor
public class VeJsczExamStageServiceImpl extends ServiceImpl<IVeJsczExamStageMapper,
        VeJsczExamStage> implements IVeJsczExamStageService {

    private IVeJsczExamStageMapper mIVeJsczExamStageMapper;

    private IVeJsczExamStageProjectMapper mIVeJsczExamStageProjectMapper;

    private IVeJsczExamProjectMapper mIVeJsczExamProjectMapper;

    private IVeJsczExamDetailMapper mDetailMapper ;

    private IVeJsczExamStageDetailMapper mStageDetailMapper ;

    @Override
    public Map<String,Object> selectPage(QueryCondition queryCondition ){
        HashMap<String,Object> map = new HashMap<>();
        IPage<VeJsczExamStage> page = new Page<>(queryCondition.getCurrent(), queryCondition.getPageSize());
        QueryWrapper<VeJsczExamStage> wrapper = new QueryWrapper<>() ;
        QueryConditionTool.advancedQueryPage(queryCondition.getConditions(),wrapper);
        wrapper.orderByDesc("yearCode");
        page = mIVeJsczExamStageMapper.selectPage(page,wrapper);
        List<VeJsczExamStage> list = page.getRecords();
        Integer count = mIVeJsczExamStageMapper.selectCount(wrapper);
        map.put("list",list);
        map.put("count", count);
        return map;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void add(VeJsczExamStageDTO veJsczExamStageDTO) {
        VeJsczExamStage stage = new VeJsczExamStage() ;
        BeanUtils.copyProperties(veJsczExamStageDTO,stage);
        stage.setCreateTime( System.currentTimeMillis()/1000 ) ;
        stage.setTerminalId(1L) ;
        mIVeJsczExamStageMapper.insert(stage) ;
        veJsczExamStageDTO.getProjectIds().forEach(l->{
            VeJsczExamStageProject v = new VeJsczExamStageProject() ;
            v.setStageId(stage.getId()).setProjectId(l) ;
            mIVeJsczExamStageProjectMapper.insert(v) ;
            // 查询指标数据
            Map<String,Object> map =Maps.newHashMap() ;
            map.put("status",1) ;
            map.put("projectId",l) ;
            List<VeJsczExamDetail> details = mDetailMapper.selectByMap(map) ;
            details.forEach(n->{
                VeJsczExamStageDetail detail = new VeJsczExamStageDetail() ;
                detail.setDetailId(n.getId()).setStageId(stage.getId()) ;
                mStageDetailMapper.insert(detail) ;
            });
        });
    }

    @Override
    public VeJsczExamStageVo getDetailById(Long id) {
        VeJsczExamStageVo vo = new VeJsczExamStageVo() ;
        VeJsczExamStage stage = mIVeJsczExamStageMapper.selectById(id) ;
        BeanUtils.copyProperties(stage,vo);
        // 查询项目信息
        vo.setProjects(mIVeJsczExamProjectMapper.getProjectByStageId(id)) ;
        return vo;
    }

    @Override
    public VeJsczExamStageVo getDetailByStage(VeJsczExamStage stage) {
        VeJsczExamStageVo vo = new VeJsczExamStageVo() ;
        BeanUtils.copyProperties(stage,vo);
        // 查询项目信息
        List<VeJsczExamProjectVo> projectVos = mIVeJsczExamProjectMapper.getProjectByStageId(stage.getId()) ;
        projectVos.forEach(l->{
            Map<String,Object> map = Maps.newHashMap() ;
            map.put("status",1) ;
            map.put("projectId",l.getId()) ;
            l.setDetails(mDetailMapper.selectByMap(map)) ;
        });
        vo.setProjects(projectVos) ;
        return vo;
    }


}
